/********************************************************************************
 * Project Name		[JavaSE_Fundamentals]
 * File Name     	[InnerClass4.java]
 * Creation Date 	[2015-01-01]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ********************************************************************************/
package objectOriented;

/**
 * 匿名内部类
 * 
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 * 
 */
public class InnerClass4 {

	/**
	 * 形式 1
	 */
	private Popcorn popcorn = new Popcorn() {
		@Override
		public void pop() {
			System.out.println("匿名内部类形式1");
		}

		@Override
		public String toString() {
			this.pop();
			return "";
		}
	};

	/**
	 * 形式 2
	 * 
	 * @param popcorn
	 *            传入的匿名内部类对象
	 */
	public void popMethod(Popcorn popcorn) {
		System.out.println("匿名内部类形式2");
	}

	public static void main(String[] args) {
		InnerClass4 anonymousInnerClass = new InnerClass4();
		System.out.println(anonymousInnerClass.popcorn);
		anonymousInnerClass.popMethod(new Popcorn() {
			@Override
			public void pop() {
				System.out.println("La La La");
			}
		});

		// 一种比较好的语法, 类似于匿名内部类
		// List<String> l = new ArrayList<>();
		// l.add("Harry");
		// l.add("Sean");
		// 等价于
		// List<String> l = new ArrayList<>() {{ add("Harry"); add("Sean");}};
	}
}

/**
 * 一个用于演示的接口
 * 
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 *
 */
interface Popcorn {

	/**
	 * pop method
	 */
	public void pop();
}